package com.example.lib_base.utils

import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.Observer
import java.util.concurrent.atomic.AtomicBoolean

/**
 * 数据倒灌
 * liveData在 项目中主要进行了方法 （赋值 post set 观察 observe）
 */
class SingleLiveData<T>:MutableLiveData<T>() {

    private var flag = AtomicBoolean(false)//记录当前数据是否为最新的，默认 false   原子性，多线程内也能保证唯一性

    //当数据进行赋值时，将记录改为最新的
    override fun postValue(value: T) {
        flag.set(true)
        super.postValue(value)
    }
    //当有最新数据时，进行展示 ，但展示完成后它就不是最新的了
    override fun observe(owner: LifecycleOwner, observer: Observer<in T>) {
        super.observe(owner){
            if(flag.compareAndSet(true,false)){
                observer.onChanged(it)
            }
        }
    }

}